package com.lijian.user.service.impl;



import com.lijian.common.domain.R;
import com.lijian.common.exception.SmsException;
import com.lijian.user.service.CaptchaService;
import com.lijian.user.util.SmsUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.BoundHashOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
/**
 * @author LiJian
 * @date 2024-10-23
 */
@Service
@Slf4j
public class CaptchaServiceImpl implements CaptchaService {
    private final StringRedisTemplate stringRedisTemplate;
    private final SmsUtil smsUtil;


    public CaptchaServiceImpl(StringRedisTemplate stringRedisTemplate, SmsUtil smsUtil) {
        this.stringRedisTemplate = stringRedisTemplate;
        this.smsUtil = smsUtil;
    }

    @Override
    public boolean getSmsCaptcha(String phone) {
        String hashKey = "login:sms:captcha:" + phone;
        BoundHashOperations<String, String, String> hashOps = stringRedisTemplate.boundHashOps(hashKey);

        // 初始检查
//        String lastSendTimestamp = hashOps.get("lastSendTimestamp");
//        String sendCount = hashOps.get("sendCount");
//        String captcha = hashOps.get("captcha");
//
//
//        // 判断发送次数是否超过限制
//        if (StringUtils.isNotBlank(sendCount) && Integer.parseInt(sendCount) >= 5) {
//            hashOps.expire(24, TimeUnit.HOURS); // 重新设置过期时间为24H
//            throw new SmsException("发送次数过多，请24H后再试");
//        }
//
//        // 判断发送频率是否过高
//        if (StringUtils.isNotBlank(lastSendTimestamp)) {
//            long lastSendTime = Long.parseLong(lastSendTimestamp);
//            long currentTime = System.currentTimeMillis();
//            long elapsedTime = currentTime - lastSendTime;
//            long interval = 60 * 1000; // 60秒
//            if (elapsedTime < interval) {
//                throw new SmsException("发送短信过于频繁，请稍后再试");
//            }
//        }
//
//        // 更新发送次数
//        int newSendCount = StringUtils.isNotBlank(sendCount) ? Integer.parseInt(sendCount) + 1 : 1;
//
//        // 生成新验证码
//        if (StringUtils.isBlank(captcha)) {
//            captcha = RandomStringUtils.randomNumeric(6);
//        }
//
//        // 发送短信
//        if (!smsUtil.sendSms(phone, captcha)) {
//            throw new SmsException("发送短信失败");
//        }

        // 更新 Redis 中的信息
        hashOps.put("captcha", "123456");
        hashOps.put("lastSendTimestamp", String.valueOf(System.currentTimeMillis()));
//        hashOps.put("sendCount", String.valueOf(newSendCount));
        hashOps.put("sendCount", String.valueOf(1));
        hashOps.expire(30, TimeUnit.MINUTES); // 设置过期时间为5分钟

        return true;
    }


}
